package com.citas.client.widget;

import java.util.ArrayList;

import com.citas.client.Display;
import com.citas.client.Getdata;
import com.citas.client.GetdataAsync;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.MetaElement;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.event.dom.client.ChangeEvent;

public class Inicio extends Composite {
	
	//UIbinder Hijos
	Login login=null;
	Registrarse registrarse=null;
	
	
	private static InicioUiBinder uiBinder = GWT.create(InicioUiBinder.class);
	@UiField DockPanel dock;
	@UiField ListBox idiomas;
	
	private ArrayList<String[]> listaIdiomas;
	
	private final GetdataAsync consulta = GWT
			.create(Getdata.class);
	
	public Inicio() {
		initWidget(uiBinder.createAndBindUi(this));
		dock.setSpacing(10);
		cargarIdiomas();
		
	}
	
	private void cargarIdiomas() {
		consulta.getIdiomas(new AsyncCallback<ArrayList<String[]> >() {
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onSuccess(ArrayList<String[]> result) {
				
				listaIdiomas=result;
				idiomas.clear();
				for(String c[]:result){
					idiomas.addItem(c[1]);
				}
				String idioma=Window.Location.getParameter("locale");
			    if(idioma!=null){
				   for(int i=0;i<listaIdiomas.size();i++){
					   if(idioma.equals(listaIdiomas.get(i)[0])){
						   idiomas.setItemSelected(i,true);
						   break;
					   }
				   }
			   }
				
			}
		});
		
	}

	public void mostrar(){
		Display.get().setWidget(this);	
	
	}
	
	interface InicioUiBinder extends UiBinder<Widget, Inicio> {
	}
	@UiHandler("Registrarse")
	void onRegistrarseClick(ClickEvent event) {
		getRegistrarse().mostrar();
	}
	
	@UiHandler("iniciarSesion")
    void onIniciarSesionClick(ClickEvent event) {
			
            getLogin().mostrar();
  
    }
	@UiHandler("idiomas")
	void onIdiomasChange(ChangeEvent event) {
		NodeList<Element> tags = Document.get().getElementsByTagName("meta");
	    for (int i = 0; i < tags.getLength(); i++) {
	        MetaElement metaTag = ((MetaElement) tags.getItem(i));
	        if (metaTag.getName().equals("gwt:property")) {
	            metaTag.setContent(listaIdiomas.get(idiomas.getSelectedIndex())[0]);
	        }
	    }
	   String idioma=Window.Location.getParameter("locale");
	   if(idioma==null){
		   Window.Location.assign(Window.Location.getHref()+"&locale="+listaIdiomas.get(idiomas.getSelectedIndex())[0]);
	   }
	   else{
		   idioma=Window.Location.getHref();
		   idioma=idioma.replaceFirst("&locale="+Window.Location.getParameter("locale"),
				  "&locale="+listaIdiomas.get(idiomas.getSelectedIndex())[0]);
		   Window.Location.assign(idioma);
	   }
	}
	
	//Funciones para tratar los hijos}
	private Login getLogin(){
		if(login==null){
			login=new Login(new Command() {
				
				@Override
				public void execute() {
					// TODO Auto-generated method stub
					mostrar();
				}
			});
		}
		return login;
	}
	
	private Registrarse getRegistrarse(){
		if(registrarse==null){
			registrarse=new Registrarse(new Command() {
				
				@Override
				public void execute() {
					// TODO Auto-generated method stub
					mostrar();
				}
			});
		}
		return registrarse;
	}
	
}
